#include "mq_connection.hpp"

void cb(chenmq::Channel::ptr& channel,const std::string consumer_tag, 
        const chenmq::BasicProperties* bp, const std::string& body)
{
    std::cout << "consumer_tag" << "消费了消息" << body << std::endl;
    channel->basicAck(bp->id());
}

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        chenmq::DLOG("usage: ./consume_client queue1");  
        return -1;  
    }

    //1, 实例化异步工作线程对象
    chenmq::AsyncWorker::ptr awp = std::make_shared<chenmq::AsyncWorker>();
    //2, 实例化连接对象，并向服务器发起连接。
    chenmq::Connection conn = std::make_shared<chenmq::Connection>("127.0.0.1", 8080, awp); //
    //3, 通过连接创建信道
    chenmq::Channel::ptr channel = conn->openChannel();
    //4, 通过信道提供的服务完成所需
    //   1,声明一个交换机exchange1--类型为广播交换
    google::protobuf::Map<std::string, std::string> tmp_map;
    channel->declareExchange("exchange1", chenmq::ExchangeType::FANOUT, true, false, tmp_map); 
    //   2,声明一个队列queue1
    channel->declareQueue("queue1", true, false, false, tmp_map);
    //   3,声明一个队列queue2
    channel->declareQueue("queue2", true, false, false, tmp_map);
    //   4,绑定queue1-exchange1, 且binding_key设置为queue1
    channel->queueBind("exchange1", "queue1", "queue1");
    //   5,绑定queue2-exchange1, 且binding_key设置为news.music.#
    channel->queueBind("exchange1", "queue2", "news.music.#");

    auto functor = std::bind(cb, channel, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
    channel->basicConsume("consumer1", argv[1], false, functor); //回调函数，收到了消息，如何去处理
    
    while(1)
    {
        sleep(1);
    }
}
// 项目的简单总结
// 
